import cacheMemory from '../../storage/cacheMemory';

/**
 * 【同步方法】请求地址队列处理
 * @description 请求地址队列处理，用于判定：哪些接口正在请求，拦截该请求
 * @param type 处理方式，值域解释：add-添加、del-删除
 * @param url 要请求的api接口地址
 * @return 操作是否成功
 */
function queue(type = 'add', url = '') {
    
    // 初始化返回数据
    let data_return = false;
    
    // url参数有效，才执行
    if (typeof(url)=="string" && url.length>0)
    {
        // 用于存放队列的 临时变量名
        let str_name = '$focus_network_queue_list';
        // 链接字符串
        let str_line = '__FOCUSUI__';
        
        // 初始化"已经存在的请求列表"
        let arr_api = [];
        // 读取本地临时缓存
        let save_short = cacheMemory('get');
        if (save_short && save_short[str_name]) { arr_api = save_short[str_name].split(str_line); }
        
        // 1. 添加地址
        if (type == "add")
        {
            // 保存队列中 是否存在相同的数据
            let index = arr_api.indexOf(url);
            // 如果有，说明正在请求，直接不允许添加
            if (index >= 0) { data_return = false; }
            // 没找到
            else {
                // 添加入地址数组
                arr_api.push(url);
                // 队列数组 → 字符串，准备保存
                let str_queue = arr_api.join(str_line);
                // 重新缓存 队列数据
                let obj_save_back = {};  obj_save_back[str_name] = str_queue;
                cacheMemory('set', obj_save_back);
                // 标记为"处理成功"
                data_return = true;
            }
        }
        
        // 2. 删除地址
        else if (type == "del")
        {
            // 相同url数据位置 下标
            let index = arr_api.indexOf(url);
            // 如果有则删除
            if (index >= 0) { arr_api.splice(index, 1); }
            
            // 队列数组 → 字符串
            let str_queue = arr_api.join(str_line);
            // 重新缓存 队列数据
            let obj_save_back = {};  obj_save_back[str_name] = str_queue;
            cacheMemory('set', obj_save_back);
            
            // 标记为"处理成功"
            data_return = true;
        }
        
    }
    
    // 返回结果数据
    return data_return;
}

export default queue;